﻿#pragma once

#include <stdbool.h>

#include "预定义.h"

定义 结构体 链表节点_结构{
    int 数据;
    结构体 链表节点_结构 *后继;
}链表节点_结构;

定义 结构体{
 链表节点_结构* 第一个节点;
 链表节点_结构* 最后一个节点;
}链表_结构;

/**
 * \brief 申请内存构造一个单向链表
 * \return 构造好的单向链表
 */
链表_结构* 构造_链表();
/**
 * \brief 释放所有节点的内存并释放链表的内存
 * \param 表 要销毁的链表
 */
void 销毁_链表(链表_结构 *表);
/**
 * \brief 向链表中添加数据
 * \param 表 要操作的链表
 * \param 数据 要添加的数据
 * \return 添加的节点指针
 */
链表节点_结构* 添加链表数据(链表_结构 *表,int 数据);
/**
 * \brief 从链表中删除节点
 * \param 表 要操作的链表
 * \param 点 要删除的节点指针
 */
void 删除链表节点(链表_结构 *表,链表节点_结构 *点);
/**
 * \brief 从链表中删除匹配到的第一个数据节点
 * \param 表 要操作的链表
 * \param 数据 要比较的数据
 */
void 删除链表数据(链表_结构 *表,int 数据);
void 清空链表(链表_结构 *表);
/**
 * \brief 查询链表中的节点指针
 * \param 表 要操作的链表
 * \param 数据 要比较的数据
 * \return 第一个匹配的节点指针
 */
链表节点_结构* 查询链表节点(链表_结构 *表,int 数据);

bool 链表空了(链表_结构 *表);
/**
 * \brief 将链表中的所有节点都打印出来
 * \param 表 操作的链表
 */
void 遍历所有链表节点(链表_结构 *表);

